<?php

namespace app\common\model;

use think\Model;

class BaseModel extends Model
{
    protected $errorMsg = '';

    /**
     * @var int 数据缓存时间/秒
     */
    protected $cacheTime = 86400;

    /**
     * 设置错误信息
     * @param string|array $msg 错误信息
     * @param string $splicer 拼接符号（用于前端弹出层识别为换行符）
     * @return false
     */
    public function setError($msg, $splicer = '<br/>')
    {
        $this->errorMsg = is_array($msg) ? implode($splicer, $msg) : $msg;
        return false;
    }

    /**
     * 获取错误信息
     * @return string
     */
    public function getError(): string
    {
        return $this->errorMsg;
    }

    /**
     * 获取字段名称
     * @param string $ids
     * @return string
     */
    public function getNamesByIds($ids, $fieldName = 'name'): string
    {
        if (strpos($ids, ',') !== false) {
            $data = $this->whereIn('id', explode(',', $ids))
                ->field($fieldName)
                ->column($fieldName);
            return implode(',', $data);
        }

        return (string)$this->where('id', $ids)->field($fieldName)->value($fieldName);
    }

    /**
     * 校验删除是否存在关联数据
     * @param mixed $targetId 目标ID
     * @return bool
     */
    public function checkDelIsExistJoinData($targetId): bool
    {
        foreach ($this->checkDelJoinTable as $k => $v) {
            $temp = explode('|', $k);
            $joinTargetId = db($temp[0])->where(sprintf($v, $targetId))->field('id')->value('id');
            if ($joinTargetId) {
                $tableAliasName = $temp[1] ?? $temp[0];
                $errorMsg = is_develop() ? ("{$tableAliasName}表存在关联数据，禁止删除：关联ID为{$joinTargetId}") : ("{$tableAliasName}表存在关联数据，禁止删除");
                $this->setError($errorMsg);
                return true;
            }
        }

        return false;
    }

}